package com.zoe.thread.th13_线程类别;

import java.util.concurrent.TimeUnit;

/**
 * @Author Zoe
 * @Date: 2021/05/07
 * @Description
 * main: 为用户线程（非守护线程）,不可以设置成守护线程
 * 子线程: 默认用户线程，可以设置成守护线程
 *
 * 守护线程服务于用户线程，任何一个守护线程都是整个JVM中所有非守护线程的保姆;
 * 只要当前JVM实例中尚存在任何一个非守护线程没有结束，守护线程就全部工作；只
 * 有当最后一个非守护线程结束时，守护线程随着JVM一同结束工作。
 */
public class ThreadType_Test {
    public static void main(String[] args) {
        System.out.println("main-start");
        for (int i = 0; i < 5; i++) {
            SunThread sunThread = new SunThread();
            // 设置成守护线程,随着main方法结束而结束
            // sunThread.setDaemon(true);

            // 设置成非守护线程,不会随着main方法结束而结束
            sunThread.setDaemon(false);
            sunThread.start();
        }

        System.out.println("main-end");
    }
}

class SunThread extends Thread{
    @Override
    public void run() {
        try {
            TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("子线程++++++++");
    }
}
